#ifndef WIDGET_H
#define WIDGET_H

#include <QObject>
#include <QWidget>
#include <QLabel>
#include <QPushButton>
#include <QTextEdit>
#include <QTextCursor>
#include <QComboBox>
#include <QCheckBox>
#include <QTextCodec>
#include "serial.h"
#include <QLineEdit>
#include <QTimer>
#include <QDateTime>
#include <QMessageBox>
#include <QGridLayout>
#include <QResizeEvent>
#include <QLineEdit>
#include <QGridLayout>
#include <QMovie>
#include "SerialEvent.h"

QT_BEGIN_NAMESPACE
namespace Ui { class Widget; }
QT_END_NAMESPACE

class Widget : public QWidget
{
    Q_OBJECT

public:
    Widget(QWidget *parent = nullptr);
    ~Widget();

    SerialEvent *mySerialEvent;

    void getCurrentTime(void);
    void setComboboxStatus(bool status);
    QString suffixHandle(int index);
    void siderBarConfig(void);

protected:
    void resizeEvent(QResizeEvent *event);

signals:
public slots:
    void transmitDate(QString transmitData); // 发送串口数据
    void receiveDate(void); // 接受串口数据

private slots:
    void on_text_receive_textChanged(); // 接收区文本改变
    void on_serial_ONOFF_P_clicked(); // 打开关闭串口点击
    void on_receive_ASCII_clicked(); // ASCII接收点击
    void on_receive_HEX_clicked(); // HEX接收点击
    void on_receive_clear_clicked(); // 清空接收区点击
    void on_transmit_auto_clicked(); // 自动发送点击
    void on_transmit_ASCII_clicked(); // ASCII发送点击
    void on_transmit_HEX_clicked(); // HEX发送点击
    void on_serial_updata_clicked(); // 更新串口点击
    void on_transmit_data_clicked(); // 发送数据点击
    void on_save_file_clicked(); // 保存至文件点击
    void on_side_btn_clicked(); // 侧边栏图标点击
    void on_deleteBtn_clicked(); // 指定数据删除按钮点击
    void on_dataTemp_textChanged(); // 目标数据文本改变
    void on_tabWidget_currentChanged(int index);
    void on_changeBtn_clicked(); // 切换按钮点击
    void on_findBtn_clicked(); // 指定数据查找按钮点击
    void on_deleteBtn2_clicked(); // 范围数据删除按钮点击
    void on_dataTitle1_clicked(); // "操作数据一"标签点击
    void on_dataTitle2_clicked(); // "操作数据二"标签点击
    void on_dataTitle0_clicked(); // "目标数据"标签点击
    void on_findBtn2_clicked(); // 范围查找按钮电机
    void on_serial_port_C_currentIndexChanged(int index); // 串口号复选框当前索引变化

private:
    Ui::Widget *ui;
    bool serial_ONOFF_P_flag = true; // 打开关闭串口标志
    // 实例化串口类
    Serial *serial_main;
    // 列表
    QStringList serialNameList; // 可用串口列表
    QStringList serialNameListOld; // 上一次可用串口列表
    QStringList baudRateList; // 波特率列表
    QStringList dataBitsList; // 数据位列表
    QStringList checkBitsList; // 校验位列表
    QStringList stopBitsList; // 停止位列表
    QStringList suffixList; // 发送后缀列表
    // 文本编码
    QTextCodec *tc;
    // 定时器
    QTimer *t1;
    // 串口数据暂存区
    QString dateBufTemp = "";
    // 发送间隔键入框
    QLineEdit *transmitTime;
    // 当前时间
    QString currentTimer;
    // 当前打开的串口号
    QString currentPort;
    // 当前选择的串口号
    QString currentPortText;
    // 侧边栏
    QWidget *sideWidget;
    bool sideWidgetFlag = false;
    int side_x,side_width,side_height;
    int side_y = 24;
    QLineEdit *lineEdit1;
    QLineEdit *lineEdit2;
    QLineEdit *lineEdit3;
    QLineEdit *lineEdit4;
    QLineEdit *lineEdit5;
    QLineEdit *lineEdit6;
    QLineEdit *lineEdit7;
    QLineEdit *lineEdit8;
    QLineEdit *lineEdit9;
    QLineEdit *lineEdit10;
    QLineEdit *lineEdit11;
    QLineEdit *lineEdit12;
    QLineEdit *lineEdit13;
    QLineEdit *lineEdit14;
    QLineEdit *lineEdit15;
    QLineEdit *lineEdit16;
    QLineEdit *lineEdit17;
    QLineEdit *lineEdit18;
    QLabel *labelTittle1;
    QLabel *labelTittle2;
    QLabel *label1;
    QLabel *label2;
    QLabel *label3;
    QLabel *label4;
    QLabel *label5;
    QLabel *label6;
    QLabel *label7;
    QLabel *label8;
    QLabel *label9;
    QLabel *label10;
    QLabel *label11;
    QLabel *label12;
    QLabel *label13;
    QLabel *label14;
    QLabel *label15;
    QLabel *label16;
    QLabel *label17;
    QLabel *label18;
    QGridLayout *layout;
    // 动画
    QMovie *movie1;
};
#endif // WIDGET_H
